package day9;
/*
    1.static关键字有什么作用
        static 它是静态修饰符，一般用来修饰类中的成员。
        被 static 修饰的成员变量属于类，不属于这个类的某个对象。
        被 static 修饰的成员可以并且建议通过类名直接访问。
    2.java包中的权限修饰符有几种，分别可以表示什么范围
        相同包下的无关类可以访问到public,protected,default修饰的成员
        相同包下的子类可以访问到public,protected,default修饰的成员

        不同包下的无关类只能访问被public修饰的成员
        可以通过对象调用public修饰的成员
        可以使用继承的方式访问父类的protected修饰的成员
* */
public class DemoDay9 {
    public static void main(String[] args) {
        //3.执行顺序
        // 父类静态->子类静态->父类构造代码块->父类构造函数->子类构造代码块->子类构造函数
        Day9Zi day9Zi = new Day9Zi();
        //4.
        //矩形
        Shape rectangle = new Shape() {
            @Override
            public void Area(double base, double height) {
                System.out.println("矩形面积为:"+(base*height));
            }
        };
        rectangle.Area(10,2);
        //三角形
        Shape triangle = new Shape() {
            @Override
            public void Area(double base, double height) {
                System.out.println("三角形面积为:"+(base*height)/2);
            }
        };
        triangle.Area(10,2);
    }
}
//3.
//父类
class Day9Fu{
    static {
        System.out.println("父类静态代码块");
    }
    {
        System.out.println("父类构造代码块");
    }
    public Day9Fu(){
        System.out.println("父类构造函数");
    }
}
//子类
class Day9Zi extends Day9Fu{
    static {
        System.out.println("子类静态代码块");
    }
    {
        System.out.println("子类构造代码块");
    }
    public Day9Zi(){
        System.out.println("子类构造函数");
    }
}
//4.
//定义图形抽象类
abstract class Shape{
    public abstract void Area(double base,double height);
}

